MySQL Java 连接与使用
MySQL 是最流行的开源关系型数据库之一,而 Java 是企业级应用开发中最常用的编程语言。将 Java 与 MySQL 结合使用,可以构建强大的数据驱动型应用程序。
本文将详细介绍如何在 Java 程序中连接和使用 MySQL 数据库,包括:
本文介绍了 Java 连接和使用 MySQL 数据库的基本步骤,包括:
- 加载 JDBC 驱动
- 建立数据库连接
- 执行 SQL 查询和更新
- 使用 PreparedStatement 防止 SQL 注入
- 事务管理
- 资源关闭
- 最佳实践
准备工作
下载 MySQL JDBC 驱动
Java 通过 JDBC (Java Database Connectivity) 技术与数据库交互。要连接 MySQL,你需要下载 MySQL Connector/J 驱动:
- 访问 MySQL Connector/J 下载页面
- 选择与你的 Java 版本兼容的驱动版本
- 下载 JAR 文件(如 mysql-connector-java-8.0.xx.jar)
将驱动添加到项目
根据你使用的开发工具或构建工具(如 Eclipse、IntelliJ IDEA、Maven 或 Gradle),将下载的 JAR 文件添加到项目的类路径中。
建立数据库连接
加载驱动程序
在 Java 代码中,首先需要加载 MySQL JDBC 驱动:
try{Class.forName("com.mysql.cj.jdbc.Driver");}catch(ClassNotFoundExceptione){System.out.println("MySQL JDBC 驱动未找到");e.printStackTrace();}
创建连接
使用
DriverManager.getConnection()
方法建立与数据库的连接:
Stringurl="jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC";Stringusername="你的用户名";Stringpassword="你的密码";try{Connectionconnection=DriverManager.getConnection(url, username, password);System.out.println("数据库连接成功!");}catch(SQLExceptione){System.out.println("数据库连接失败");e.printStackTrace();}
3.2.1 连接参数说明
-
jdbc:mysql://localhost:3306/:MySQL 服务器的默认地址和端口 -
useSSL=false:禁用 SSL 连接(开发环境) -
serverTimezone=UTC:设置服务器时区,避免时区问题
执行 SQL 操作
创建 Statement 对象
Statement 对象用于执行静态 SQL 语句:
Statementstatement=connection.createStatement();
执行查询
使用
executeQuery()
方法执行 SELECT 语句:
Stringsql="SELECT * FROM 表名";ResultSetresultSet=statement.executeQuery(sql);while(resultSet.next()){intid=resultSet.getInt("id");Stringname=resultSet.getString("name");System.out.println("ID: "+id+", Name: "+name);}
执行更新
使用
executeUpdate()
方法执行 INSERT、UPDATE 或 DELETE 语句:
StringinsertSQL="INSERT INTO 表名 (列1, 列2) VALUES ('值1', '值2')";introwsAffected=statement.executeUpdate(insertSQL);System.out.println("影响的行数: "+rowsAffected);
使用 PreparedStatement
PreparedStatement 可以防止 SQL 注入,提高性能:
Stringsql="INSERT INTO users (name, email) VALUES (?, ?)";PreparedStatementpreparedStatement=connection.prepareStatement(sql);preparedStatement.setString(1,"张三");preparedStatement.setString(2,"[email protected]");introwsInserted=preparedStatement.executeUpdate();System.out.println("插入的行数: "+rowsInserted);
事务管理
基本概念
事务是一组要么全部成功要么全部失败的 SQL 操作。事务操作示例
try{// 关闭自动提交connection.setAutoCommit(false);// 执行多个 SQL 操作statement.executeUpdate("UPDATE accounts SET balance = balance - 100 WHERE id = 1");statement.executeUpdate("UPDATE accounts SET balance = balance + 100 WHERE id = 2");// 提交事务connection.commit();System.out.println("事务执行成功");}catch(SQLExceptione){// 发生错误时回滚connection.rollback();System.out.println("事务执行失败,已回滚");e.printStackTrace();}finally{// 恢复自动提交connection.setAutoCommit(true);}
关闭资源
为什么需要关闭资源
数据库连接是有限的资源,使用后必须关闭以避免资源泄漏。
如何正确关闭资源
try{if(resultSet!=null)resultSet.close();if(statement!=null)statement.close();if(connection!=null)connection.close();}catch(SQLExceptione){e.printStackTrace();}
6.3 使用 try-with-resources
Java 7+ 可以使用 try-with-resources 自动关闭资源:
try(Connectionconn=DriverManager.getConnection(url, username, password);Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("SELECT * FROM users")){while(rs.next()){// 处理结果}}catch(SQLExceptione){e.printStackTrace();}
最佳实践
使用连接池
生产环境中应使用连接池(如 HikariCP、c3p0)管理数据库连接:
// HikariCP 示例HikariConfig config=newHikariConfig();config.setJdbcUrl("jdbc:mysql://localhost:3306/你的数据库");config.setUsername("用户名");config.setPassword("密码");HikariDataSource dataSource=newHikariDataSource(config);Connectionconnection=dataSource.getConnection();
处理异常
正确处理 SQL 异常,提供有意义的错误信息:
try{// 数据库操作}catch(SQLExceptione){System.err.println("SQL 错误: "+e.getMessage());System.err.println("SQL 状态: "+e.getSQLState());System.err.println("错误代码: "+e.getErrorCode());}
7.3 使用 DAO 模式
将数据访问逻辑封装在 Data Access Object (DAO) 中,提高代码的可维护性:
publicclassUserDao{privateConnectionconnection;publicUserDao(Connectionconnection){this.connection=connection;}publicUser getUserById(intid)throwsSQLException{Stringsql="SELECT * FROM users WHERE id = ?";try(PreparedStatementstmt=connection.prepareStatement(sql)){stmt.setInt(1, id);ResultSetrs=stmt.executeQuery();if(rs.next()){returnnewUser(rs.getInt("id"), rs.getString("name"));}}returnnull;}}
通过掌握这些基础知识,你已经可以开始在 Java 应用程序中使用 MySQL 数据库了。随着经验的积累,你可以进一步学习更高级的主题,如连接池、ORM 框架(如 Hibernate、MyBatis)等。